﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TA.Turbo
{
	/// <summary>
	/// All of the built-in Turbo JavaScript scripts.
	/// </summary>
	public enum Script
	{
		/// <summary>
		/// Browser name and version detection.
		/// </summary>
		Browser,
		/// <summary>
		/// Encapsulates XMLHttpRequest in a static JS class which performs common AJAX functions, like creating requests and building a parameter set.
		/// </summary>
		Ajax,
		/// <summary>
		/// A few handy functions to manipulate CSS styles.
		/// </summary>
		CSS,
		/// <summary>
		/// "Base" Element class definition (for IE 6-7), as well as some of the basic extension methods.
		/// </summary>
		Elements,
		/// <summary>
		/// Turbo DOM query engine.
		/// </summary>
		ElementSearch,
		/// <summary>
		/// Extensions for Date class.
		/// </summary>
		Date,
		/// <summary>
		/// Encapsulates document.cookie in a static JS class which performs main (read, write, erase) cookie operations.
		/// </summary>
		Cookies,
		/// <summary>
		/// The "base" file for Turbo. Implements class inherittance, the Coalesce function, and the Range class.
		/// </summary>
		General,
		/// <summary>
		/// Implements debugging helpers (varDump and log functions).
		/// </summary>
		Debug,
		/// <summary>
		/// Extends built-in JS classes to output JSON, declares and implements JsonWriter, and declares IJsonSerializable and IJsonDeserializable.
		/// </summary>
		Json,
		/// <summary>
		/// Defines static Char class with some helper methods.
		/// </summary>
		Char,
	
		/// <summary>
		/// Implements the Array.AddRange extension method which adds a range of items.
		/// </summary>
		Array_AddRange,
		/// <summary>
		/// Implements the Array.Remove extension method which removes an item.
		/// </summary>
		Array_Remove,
		/// <summary>
		/// Implements the Array.Clear extension method which clears the array.
		/// </summary>
		Array_Clear,
		/// <summary>
		/// Implements the Array.IndexOf extension method which returns the index of the specified item in the array.
		/// </summary>
		Array_IndexOf,
		/// <summary>
		/// Implements the Array.IndexWhere extension method which returns the index of the item which suits the specified condition.
		/// </summary>
		Array_IndexWhere,
		/// <summary>
		/// Implements the Array.First extension method which returns the first item in the array that suits the specified condition.
		/// </summary>
		Array_First,
		/// <summary>
		/// Implements the Array.Where extension method which returns a sub-set of this array which matches the specified condition.
		/// </summary>
		Array_Where,
		/// <summary>
		/// Implements the Array.Select extension method which returns an array each item of which is obtained by calling the specified function on the corresponding item of the source array.
		/// </summary>
		Array_Select,
		/// <summary>
		/// Implements the Array.Contains extension method which checks if the specified item is part of the array.
		/// </summary>
		Array_Contains,

		/// <summary>
		/// Implements the Element.SetSelection extension method which changes the selection of a text box.
		/// </summary>
		Element_SetSelection,
		/// <summary>
		/// Implements the Element.get_SelectionStart extension method which gets the start of the selection in a text box.
		/// </summary>
		Element_getSelectionStart,
		/// <summary>
		/// Implements the Element.get_SelectionEnd extension method which gets the end of the selection in a text box.
		/// </summary>
		Element_getSelectionEnd,
		/// <summary>
		/// Implements the Element.AddClass extension method which adds a CSS class to an element.
		/// </summary>
		Element_AddClass,
		/// <summary>
		/// Implements the Element.RemoveClass extension method which removes a CSS class from an element.
		/// </summary>
		Element_RemoveClass,
		/// <summary>
		/// Implements the Element.HasClass extension method which determines if an element has the specified class.
		/// </summary>
		Element_HasClass,
		/// <summary>
		/// Implements the Element.ClearChildNodes extension method which removes all child nodes from an element.
		/// </summary>
		Element_ClearChildNodes,
		/// <summary>
		/// Implements the Element.PerformRecursive extension method which recursively performs the specified operation on all nodes under this element.
		/// </summary>
		Element_PerformRecursive,
		/// <summary>
		/// Implements the Element.Contains extension method which checks if this element is an ascendant of the specified node.
		/// </summary>
		Element_Contains,
	
		/// <summary>
		/// Implements the RegExp.Escape extension method which regex-escapes the specified string.
		/// </summary>
		RegExp_Escape,
		/// <summary>
		/// Implements the RegExp.Matches extension method which runs the regex repetitively until the whole string is parsed and returns an array of matches.
		/// </summary>
		RegExp_Matches,
		/// <summary>
		/// Implements the RegExp.Replace extension method which replaces all matches in the specified string with the specified replacement value.
		/// </summary>
		RegExp_Replace,

		/// <summary>
		/// Implements the String.Contains extension method which checks if the string contains the specified string.
		/// </summary>
		String_Contains,
		/// <summary>
		/// Implements the String.EndsWith extension method which checks if the string ends with the specified string.
		/// </summary>
		String_EndsWith,
		/// <summary>
		/// Implements the String.Equals extension method which performs a text comparison on two strings.
		/// </summary>
		String_Equals,
		/// <summary>
		/// Implements the String.Format extension method which formats the provided input using the specified format string.
		/// </summary>
		String_Format,
		/// <summary>
		/// Implements the String.HTMLEncode extension method which HTML-encodes text for accurate display on a web-page.
		/// </summary>
		String_HTMLEncode,
		/// <summary>
		/// Implements the String.IsNullOrEmpty static method which checks if the specified string is null/empty.
		/// </summary>
		String_IsNullOrEmpty,
		/// <summary>
		/// Implements the String.PadLeft extension method which pads the string with the specified character on the left until it reaches a certain length.
		/// </summary>
		String_PadLeft,
		/// <summary>
		/// Implements the String.PadRight extension method which pads the string with the specified character on the right until it reaches a certain length.
		/// </summary>
		String_PadRight,
		/// <summary>
		/// Implements the String.Pluralize extension method which pluralized the noun contained in the string.
		/// </summary>
		String_Pluralize,
		/// <summary>
		/// Implements the String.Replace extension method which replaces all occurrences of a specified string with a replacement string.
		/// </summary>
		String_Replace,
		/// <summary>
		/// Implements the String.StartsWith extension method which checks if the string starts with the specified string.
		/// </summary>
		String_StartsWith,
		/// <summary>
		/// Implements the String.TakeFirst extension method which takes a number of characters from the beginning of the string.
		/// </summary>
		String_TakeFirst,
		/// <summary>
		/// Implements the String.Trim extension method which removes whitespace at the start and end of the string.
		/// </summary>
		String_Trim,
		/// <summary>
		/// Implements the String.TrimEnd extension method which removes whitespace at the end of the string.
		/// </summary>
		String_TrimEnd,
		/// <summary>
		/// Implements the String.TrimStart extension method which removes whitespace at the start of the string.
		/// </summary>
		String_TrimStart,

		/// <summary>
		/// Implements the location.GetQueryStringParam extension method which returns the value of a query string parameter.
		/// </summary>
		Location_GetQueryStringParam,
		/// <summary>
		/// Implements the location.GetHashParam extension method which which returns the value of a hash string parameter.
		/// </summary>
		Location_GetHashParam,
		/// <summary>
		/// Implements the location._GetParam extension method which which returns the value of a parameter from any string (used by the query string and hash siblings).
		/// </summary>
		Location__GetParam,

		/// <summary>
		/// Defines StringBuilder class which allows for fast string concatenation.
		/// </summary>
		StringBuilder,
		/// <summary>
		/// Extensions for Math class.
		/// </summary>
		Math,

		/// <summary>
		/// Extensions for Number class.
		/// </summary>
		Number,

		/// <summary>
		/// Defines Point class which denotes a 2D location in (x,y) format.
		/// </summary>
		Point,
		/// <summary>
		/// Defines Size class which denotes a 2D size in (w,h) format.
		/// </summary>
		Size,
		/// <summary>
		/// A few handy functions to manipulate the position and size of elements.
		/// </summary>
		SizePos,

		/// <summary>
		/// Defines MouseButton enum which lists mouse buttons (used for mouse event handling).
		/// </summary>
		MouseButton,
		/// <summary>
		/// Defines Events class and cross-browser, low-level methods to access the event system.
		/// </summary>
		EventsBase,
		/// <summary>
		/// Base class for all event handlers.
		/// </summary>
		AttachedHandler,
		/// <summary>
		/// Defines DOMReadyHandler class which provides cross-browser "domready" event support.
		/// </summary>
		DOMReadyHandler,
		/// <summary>
		/// Defines HashChangeHandler class which provides cross-browser "hashchange" event support.
		/// </summary>
		HashChangeHandler,
		/// <summary>
		/// Defines HashChangeHandler class which provides cross-browser "keypress" event support.
		/// </summary>
		/// <remarks>
		/// For MSIE, this class emulates "keypress" by capturing "keydown" and "keyup" and sending multiple "keypress" events in an interval callback. 
		/// It's not perfect because it can't detect current OS keyboard settings (be it Windows or w/e) and thus defaults to Windows "out-of-the-box" settings
		/// which may be different from some users' custom settings and non-Windows OS settings.
		/// </remarks>
		KeyPressHandler,
		/// <summary>
		/// Defines MouseEnterLeaveHandler class which provides cross-browser "mouseenter" and "mouseleave" events support.
		/// </summary>
		MouseEnterLeaveHandler,
		/// <summary>
		/// Defines MouseWheelHandler class which provides cross-browser "mousewheel" event support.
		/// </summary>
		MouseWheelHandler,
		/// <summary>
		/// Cross-browser events sub-system.
		/// </summary>
		Events,
		/// <summary>
		/// Defines EventSender which can raise events.
		/// </summary>
		EventSender,


		/// <summary>
		/// Defines the DataType enumeration.
		/// </summary>
		DataType,
		/// <summary>
		/// Defines the DataDirection enumeration.
		/// </summary>
		DataDirection,
		/// <summary>
		/// Defines the Orientation enumeration.
		/// </summary>
		Orientation,
		/// <summary>
		/// Defines the DropDownTrigger enumeration which is used by the Menu control.
		/// </summary>
		DropDownTrigger,
		/// <summary>
		/// Defines the GroupedPagingMode enumeration which is used by the GroupedRepeater control.
		/// </summary>
		GroupedPagingMode,
	
		/// <summary>
		/// Namespace declarations for the Turbo framework's client side class library.
		/// </summary>
		TurboBase,
		/// <summary>
		/// Common methods used across the Turbo framework.
		/// </summary>
		TurboCommon,
		/// <summary>
		/// Defines methods which allow unique cookies.
		/// </summary>
		TurboCookies,
		/// <summary>
		/// Defines AjaxResponse class which contains the response to an AJAX request.
		/// </summary>
		AjaxResponse,
		/// <summary>
		/// Defines ResponseValidator class which specifies the validation result for a single validator during an AJAX response.
		/// </summary>
		ResponseValidator,
		/// <summary>
		/// Defines ResponseUpdatePanel class which contains the contents of an UpdatePanel during an AJAX response.
		/// </summary>
		ResponseUpdatePanel,
		/// <summary>
		/// Defines ResponseUpdatePanelInclude class which specifies an include to be added as part of an AJAX response.
		/// </summary>
		ResponseUpdatePanelInclude,
		/// <summary>
		/// Defines ResponseUpdatePanelIncludeCollection class which stores a collection of ResponseUpdatePanelInclude's.
		/// </summary>
		ResponseUpdatePanelIncludeCollection,
		/// <summary>
		/// Defines ResponseControl class which contains the response data of a single control in an AJAX response.
		/// </summary>
		ResponseControl,
		/// <summary>
		/// Implements basic code for posting data to the server.
		/// </summary>
		Turbo,
		/// <summary>
		/// Implements AJAX form submission capability.
		/// </summary>
		TurboAjax,
		/// <summary>
		/// Implements complete (page) form submission capability.
		/// </summary>
		TurboPage,
		/// <summary>
		/// Defines FieldBinding class which describes how a control is bound to a field.
		/// </summary>
		FieldBinding,
		/// <summary>
		/// Defines ListItem class which holds information about a list item in a list control.
		/// </summary>
		ListItem,
		/// <summary>
		/// Defines PostScenario class which describes a form submission scenario.
		/// </summary>
		PostScenario,
		/// <summary>
		/// Defines ServerEventSender class which extends EventSender and can raise server-side events.
		/// </summary>
		ServerEventSender,
		
		/// <summary>
		/// Defines EventDefinition class which defines events for controls.
		/// </summary>
		EventDefinition,
		/// <summary>
		/// Defines PropertyDefinition class which defines properties for controls.
		/// </summary>
		PropertyDefinition,
		/// <summary>
		/// Base class for all client-side control classes.
		/// </summary>
		BaseControl,
		/// <summary>
		/// Base class for all client-side complex control classes.
		/// </summary>
		BaseComplexControl,
		/// <summary>
		/// Base class for all client-side value control classes.
		/// </summary>
		BaseComplexValueControl,

		/// <summary>
		/// Defines TA.Turbo.Data.Container class which allows for binding of data to a set of controls.
		/// </summary>
		Data,
		/// <summary>
		/// Defines TA.Turbo.Common.MarkupTemplate and TA.Turbo.Common.TemplateInstance classes which describe a template and identify an instance of a template, respectively.
		/// </summary>
		Template,
		/// <summary>
		/// Defines TA.Turbo.Data.DataTemplate which inherits from TA.Turbo.Common.TemplateInstance and TA.Turbo.Data.Container.
		/// </summary>
		DataTemplate,
	}
}
